#ifndef RESOURCE_MANAGER_H
#define RESOURCE_MANAGER_H

#include <map>

/*!

ResourceManager enkapsuluje menedzer zasobow. 
Uwaga: klasa udostepnia funkjce zwracajace wskaznik do zasobu oraz funkcje usuwajace zasob. W przypadku gdy zwrocony zostanie wskanzik do zasobu, 
nastepnie ten zasob zostanie usuniety poprzendi wskanzik bedzie nieprawidlowy.

*/
template< class T >
class ResourceManager
{
 typedef std::map< std::string, T* > Dictionary;

 //protected:
public:
	Dictionary namesMap;

 public:
	ResourceManager()
	{ namesMap.clear(); }

	virtual ~ResourceManager()
	{}

	//! Usuwa wszystkie zasoby
	virtual void DeleteAll() = 0;

	//! Pobiera zasob. 
	T* GetResource( const char* key );

	//! Usuwa zasob. 
	virtual const bool DeleteResource( const char* key ) = 0;

	size_t GetSize()
	{ return namesMap.size(); }

};

//------------------------------------------- GetResource -----------------------------------------------//
template< class T >
T* ResourceManager< T >::GetResource( const char* key )
{ 
	string skey = string( key );
	map< string, T* >::iterator it = namesMap.find( skey );
	
	if( it != namesMap.end() )
		return ((*it).second);
	else
		return NULL;

}
//------------------------------------------- Uwaga ------------------------------------------------------//
/*
	Klasa szablonowa, wszsytko musi isc do jednego pliku (?)
*/

#endif